package com.xinchao.service;

import com.xinchao.core.exception.ServiceException;
import com.xinchao.model.Module;
import com.xinchao.model.dto.MenuModuleDTO;
import com.xinchao.model.dto.ModuleDTO;
import com.xinchao.model.vo.RoleModuleTreeVO;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 模块Service
 *
 * @author dxy
 * @date 2018/6/22 10:08
 */
public interface ModuleService {
	/**
	 * 保存模块
	 *
	 * @param module Module
	 */
	void saveModule(Module module, HttpServletRequest request) throws ServiceException;

	/**
	 * 通过ID更新模块
	 *
	 * @param module Module
	 */
	void updateModuleById(Module module, HttpServletRequest request) throws ServiceException;

	/**
	 * 角色模块列表
	 *
	 * @return List<RoleModuleTreeVO>
	 */
	List<RoleModuleTreeVO> listAllRoleModule();

	/**
	 * 获取模块树列表
	 *
	 * @return List<ModuleDTO>
	 */
	List<ModuleDTO> getTreeList(@Param("roleId") Long roleId);

	/**
	 * 通过模块名称获取模块
	 *
	 * @param moduleName 模块名称
	 * @return Module
	 */
	Module getModuleByModuleName(String moduleName) throws ServiceException;

	/**
	 * 获取模块的子模块
	 *
	 * @param moduleId 模块ID
	 * @return List<ModuleDTO>
	 */
	List<ModuleDTO> listChildrenModule(Long moduleId) throws ServiceException;


	/**
	 * 通过模块ID获取角色ID列表
	 *
	 * @param moduelId 模块ID
	 * @return List<Long>
	 */
	List<Long> listRoleIdsFromRoleModuleByModuleId(Long moduelId) throws ServiceException;

	/**
	 * 通过模块ID删除模块
	 *
	 * @param moduleId 模块ID
	 * @param request  HttpServletRequest
	 */
	void deleteModuleById(Long moduleId, HttpServletRequest request) throws ServiceException;

	/**
	 * 获取用户所拥有的菜单模块
	 *
	 * @param userId  用户ID
	 * @return List<MenuModuleDTO>
	 */
	List<MenuModuleDTO> listMenuModuleByUserId(Long userId) throws ServiceException;

}
